import router from './router'
import store from './store'
import { Message } from 'element-ui'

//引入nprogress进度条
import NProgress from 'nprogress' 
//引入nprogress进度条的样式
import 'nprogress/nprogress.css' 

// 从cookie 中 获取 token
import { getToken ,getId} from '@/utils/auth' 
// 获取页面标题
import getPageTitle from '@/utils/get-page-title'

// NProgress 配置
NProgress.configure({ showSpinner: false }) 

// 不需要重定向的白名单
const whiteList = ['/login'] 


// router.beforeEach 注册一个全局前置 路由守卫
router.beforeEach(async(to, from, next) => {
  //  开启进度条
  NProgress.start()
  // 设置页面title
  document.title = getPageTitle(to.meta.title)
  //  获取是否有token
  // const hasToken = getToken()
  const hasToken = getToken()
  const id = getId()
  const roles = []
  roles.push(hasToken)


  if (hasToken) {
    if (to.path === '/login') {
      // 有权限 已经登录去登录页直接跳转首页
      next({ path: '/' })
      //结束进度条
      NProgress.done()
    } else {
      // 是否获取了用户信息
      const hasGetUserInfo = store.getters.avatar
      if (hasGetUserInfo) {
        // console.log('有用户信息');
        next()
      } else {
        // console.log('无用户信息');
          const res = await store.dispatch("admin/getInfo",id)
          if(res == 1) {
            try{
                // console.log("权限 ");
                  // console.log(roles);
                  // console.log("bug 放弃了");
                  // const accessRoutes = await store.dispatch('permission/generateRoutes', roles)
                  
                  // for(let i =0; i< accessRoutes.length; i++) {
                 
                  //   // console.log(accessRoutes[i]);
                    
                  //   // console.log(router.options.routes)
                  //   router.addRoute(accessRoutes[i])
                  // }
 
                  // router.addRoute(accessRoutes[0])
                  // next({ ...to, replace: true })

                   next()
              }catch(e) {
                console.log(e);
              }

          }else{
            // 移除 token 去重新登录
            await store.dispatch('admin/resetToken')
            Message.error('获取用户信息失败，请重新登录')
            next(`/login?redirect=${to.path}`)
            NProgress.done()  
          }

      }
    }
  } else {
    
    // 没有 token
    console.log('全局路由前置守卫  没有token ');
    if (whiteList.indexOf(to.path) !== -1) {
      // 前往路径在白名单上，直接放行
      next()
    } else {
      // 其他的页面 重定向到登录
      next(`/login?redirect=${to.path}`)
      NProgress.done()
    }
  }
})


// router..afterEach 注册一个全局后置 路由守卫
router.afterEach(() => {
  //  关闭进度条
  NProgress.done()
})
